package tianqi.utils.mail;

/**
 * 简单邮件（不带附件的邮件）发送器
 */
import java.util.Date;
import java.util.Properties;

import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.Address;
import javax.mail.BodyPart;
import javax.mail.Message;
import javax.mail.Multipart;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
import javax.mail.internet.MimeUtility;

public class SimpleMailSender {
	/**
	 * 以文本格式发送邮件
	 * 
	 * @param mailInfo
	 *            待发送的邮件的信息
	 */
	public boolean sendTextMail(MailSenderInfo mailInfo) throws Exception {
		// 判断是否需要身份认证
		MyAuthenticator authenticator = null;
		Properties pro = mailInfo.getProperties();
		if (mailInfo.isValidate()) {
			// 如果需要身份认证，则创建一个密码验证器
			authenticator = new MyAuthenticator(mailInfo.getUserName(), mailInfo.getPassword());
		}
		// 根据邮件会话属性和密码验证器构造一个发送邮件的session
		Session sendMailSession = Session.getDefaultInstance(pro, authenticator);
		System.out.println("构造一个发送邮件的session");

		// 根据session创建一个邮件消息
		Message mailMessage = new MimeMessage(sendMailSession);
		// 创建邮件发送者地址
		Address from = new InternetAddress(mailInfo.getFromAddress());
		// 设置邮件消息的发送者
		mailMessage.setFrom(from);
		// 创建邮件的接收者地址，并设置到邮件消息中
		Address to = new InternetAddress(mailInfo.getToAddress());
		mailMessage.setRecipient(Message.RecipientType.TO, to);
		// 设置邮件消息的主题
		mailMessage.setSubject(mailInfo.getSubject());
		// 设置邮件消息发送的时间
		mailMessage.setSentDate(new Date());
		// 设置邮件消息的主要内容
		String mailContent = mailInfo.getContent();
		mailMessage.setText(mailContent);
		// 发送邮件
		Transport.send(mailMessage);
		System.out.println("发送成功！");
		return true;
	}

	/**
	 * 以HTML格式发送邮件
	 * 
	 * @param mailInfo
	 *            待发送的邮件信息
	 */
	public boolean sendHtmlMail(MailSenderInfo mailInfo) throws Exception {
		// 判断是否需要身份认证
		MyAuthenticator authenticator = null;
		Properties pro = mailInfo.getProperties();
		// 如果需要身份认证，则创建一个密码验证器
		if (mailInfo.isValidate()) {
			authenticator = new MyAuthenticator(mailInfo.getUserName(), mailInfo.getPassword());
		}
		// 根据邮件会话属性和密码验证器构造一个发送邮件的session
		Session sendMailSession = Session.getInstance(pro, authenticator);

		// 根据session创建一个邮件消息
		Message mailMessage = new MimeMessage(sendMailSession);
		// 创建邮件发送者地址
		Address from = new InternetAddress(mailInfo.getFromAddress());
		// 设置邮件消息的发送者
		mailMessage.setFrom(from);
		// 创建邮件的接收者地址，并设置到邮件消息中
		Address to = new InternetAddress(mailInfo.getToAddress());
		// Message.RecipientType.TO属性表示接收者的类型为TO
		mailMessage.setRecipient(Message.RecipientType.TO, to);
		// 设置邮件消息的主题
		mailMessage.setSubject(mailInfo.getSubject());
		// 设置邮件消息发送的时间
		mailMessage.setSentDate(new Date());
		// MiniMultipart类是一个容器类，包含MimeBodyPart类型的对象
		Multipart mainPart = new MimeMultipart();
		// 创建一个包含HTML内容的MimeBodyPart
		BodyPart html = new MimeBodyPart();
		// 设置HTML内容
		html.setContent(mailInfo.getContent(), "text/html; charset=utf-8");
		mainPart.addBodyPart(html);
		// 将MiniMultipart对象设置为邮件内容
		mailMessage.setContent(mainPart);
		// 发送邮件
		Transport.send(mailMessage);
		return true;
	}

	/**
	 * 发送带有附件的邮件
	 * 
	 * @param mailInfo
	 * @return
	 * @throws Exception
	 */
	public boolean sendFileMail(MailSenderInfo mailInfo) throws Exception {
		MyAuthenticator authenticator = null;
		Properties pro = mailInfo.getProperties();
		if (mailInfo.isValidate()) {
			authenticator = new MyAuthenticator(mailInfo.getUserName(), mailInfo.getPassword());
		}
		// 根据邮件会话属性和密码验证器构造一个发送邮件的session
		Session session = Session.getInstance(pro, authenticator);
		session.setDebug(true);
		MimeMessage message = new MimeMessage(session);
		// 创建邮件发送者地址
		Address from = new InternetAddress(mailInfo.getFromAddress());
		message.setFrom(from);
		// 创建邮件的接收者地址，并设置到邮件消息中
		Address to = new InternetAddress(mailInfo.getToAddress());
		message.setRecipient(Message.RecipientType.TO, to);
		message.setSubject(mailInfo.getSubject());

		// 创建邮件中的数据

		// 创建正文
		MimeBodyPart text = new MimeBodyPart();
		text.setContent(mailInfo.getContent() + "<br/><img src='cid:1.jpg'><br/>", "text/html; charset=utf-8");
		
		if (mailInfo.getImgPath() == null && mailInfo.getFilePath()==null) {
			MimeMultipart mm = new MimeMultipart();
			mm.addBodyPart(text);
			message.setContent(mm);
			message.saveChanges();
			Transport.send(message);
			return true;
		}
		
		
		
		
		if (mailInfo.getImgPath() == null && mailInfo.getFilePath()!=null) {
			// 创建要发送的文件
			MimeBodyPart file = new MimeBodyPart();
			DataHandler dhfile = new DataHandler(new FileDataSource(mailInfo.getFilePath()));
			file.setDataHandler(dhfile);
			file.setFileName(MimeUtility.encodeText(dhfile.getName()));
			MimeMultipart mm = new MimeMultipart();
			mm.addBodyPart(text);
			mm.addBodyPart(file);
			mm.setSubType("related");
			message.setContent(mm);
			message.saveChanges();
			// 发送邮件
			Transport.send(message);
			return true;

		}
		// 创建图片
		MimeBodyPart image = new MimeBodyPart();

		DataHandler dh = new DataHandler(new FileDataSource(mailInfo.getImgPath()));
		image.setDataHandler(dh);

		image.setContentID("1.jpg");
		
		
		if (mailInfo.getFilePath()==null && mailInfo.getImgPath()!=null) {
			// 描述数据之间的关系
			MimeMultipart mm = new MimeMultipart();
			mm.addBodyPart(text);
			mm.addBodyPart(image);
			mm.setSubType("related");
			message.setContent(mm);
			message.saveChanges();
			// 发送邮件
			Transport.send(message);
			return true;
			
		}
		
		
		// 创建要发送的文件
		MimeBodyPart file = new MimeBodyPart();
		// if (mailInfo.getFilePath()!="" && mailInfo.getFilePath()!=null) {
		DataHandler dhfile = new DataHandler(new FileDataSource(mailInfo.getFilePath()));
		file.setDataHandler(dhfile);
		file.setFileName(MimeUtility.encodeText(dhfile.getName()));
		// }

		// 描述数据之间的关系
		MimeMultipart mm = new MimeMultipart();
		mm.addBodyPart(text);
		mm.addBodyPart(image);
		mm.setSubType("related");
		MimeBodyPart ti = new MimeBodyPart();
		ti.setContent(mm);

		MimeMultipart mmfile = new MimeMultipart();
		mmfile.addBodyPart(ti);
		mmfile.addBodyPart(file);
		mmfile.setSubType("mixed");

		message.setContent(mmfile);
		message.saveChanges();
		// 发送邮件
		Transport.send(message);
		return true;
	}

	/*
	 * @title:标题
	 * 
	 * @content:内容
	 * 
	 * @type:类型,1:文本格式;2:html格式
	 * 
	 * @tomail:接收的邮箱
	 */
	public boolean sendMail(String title, String content, String type, String tomail) throws Exception {

		// 这个类主要是设置邮件
		MailSenderInfo mailInfo = new MailSenderInfo();
		mailInfo.setMailServerHost("smtp.exmail.qq.com");
		// mailInfo.setMailServerHost("smtp.qq.com");
		mailInfo.setMailServerPort("25");
		mailInfo.setValidate(true);
		mailInfo.setUserName("it@126.com");
		mailInfo.setPassword("tttt");// 您的邮箱密码
		mailInfo.setFromAddress("it@126.com");
		mailInfo.setToAddress(tomail);
		mailInfo.setSubject(title);
		mailInfo.setContent(content);
		// 这个类主要来发送邮件

		SimpleMailSender sms = new SimpleMailSender();

		if ("1".equals(type)) {
			return sms.sendTextMail(mailInfo);// 发送文体格式
		} else if ("2".equals(type)) {
			return sms.sendHtmlMail(mailInfo);// 发送html格式
		}
		return false;
	}

	/**
	 * @param SMTP
	 *            邮件服务器
	 * @param PORT
	 *            端口
	 * @param EMAIL
	 *            本邮箱账号
	 * @param PAW
	 *            本邮箱密码
	 * @param toEMAIL
	 *            对方箱账号
	 * @param TITLE
	 *            标题
	 * @param CONTENT
	 *            内容
	 * @param TYPE
	 *            1：文本格式;2：HTML格式
	 */
	public static void sendEmail(String SMTP, String PORT, String EMAIL, String PAW, String toEMAIL, String TITLE,
			String CONTENT, String TYPE) throws Exception {

		// 这个类主要是设置邮件
		MailSenderInfo mailInfo = new MailSenderInfo();

		mailInfo.setMailServerHost(SMTP);
		mailInfo.setMailServerPort(PORT);
		mailInfo.setValidate(true);
		mailInfo.setUserName(EMAIL);
		mailInfo.setPassword(PAW);
		mailInfo.setFromAddress(EMAIL);
		mailInfo.setToAddress(toEMAIL);
		mailInfo.setSubject(TITLE);
		mailInfo.setContent(CONTENT);
		// 这个类主要来发送邮件

		SimpleMailSender sms = new SimpleMailSender();

		if ("1".equals(TYPE)) {
			sms.sendTextMail(mailInfo);
		} else {
			sms.sendHtmlMail(mailInfo);
		}

	}

//	 public static void main(String[] args) throws Exception {
//	 // 这个类主要是设置邮件
//	 MailSenderInfo mailInfo = new MailSenderInfo();
//	// mailInfo.setMailServerHost("smtp.qq.com");
//	 mailInfo.setMailServerHost("smtp.163.com");
//	// mailInfo.setMailServerPort("465");
//	 mailInfo.setMailServerPort("25");
//	 mailInfo.setQQ(false);
//	 mailInfo.setValidate(true);
//	 mailInfo.setUserName("15732075781@163.com");
//	 mailInfo.setPassword("tq1234");// 您的邮箱密码163
//	// mailInfo.setPassword("clzhqmznrdtbbfia");// 您的邮箱密码qq
//	 mailInfo.setFromAddress("15732075781@163.com");
//	 mailInfo.setToAddress("977589558@qq.com");
//	 mailInfo.setSubject("田奇 的大项目haha");
//	 mailInfo.setContent("<span style='color:#e4393c;font-size:25px;'>田奇 我的大项目！！！oo </span>");
//	 // 这个类主要来发送邮件
//	
//	 SimpleMailSender sms = new SimpleMailSender();
//	// sms.sendTextMail(mailInfo);//发送文体格式
//	 sms.sendHtmlMail(mailInfo);//发送html格式
//	
//	 }
	public static void main(String[] args) throws Exception {
		SimpleMailSender sms = new SimpleMailSender();
		MailSenderInfo mailInfo = new MailSenderInfo();
		 mailInfo.setMailServerHost("smtp.qq.com");
//		mailInfo.setMailServerHost("smtp.163.com");
		 mailInfo.setMailServerPort("465");
//		mailInfo.setMailServerPort("25");
		mailInfo.setQQ(true);
		mailInfo.setValidate(true);
//		mailInfo.setUserName("15732075781@163.com");
		 mailInfo.setUserName("977589558@qq.com");
//		mailInfo.setPassword("tq1234");// 您的邮箱密码163
		 mailInfo.setPassword("clzhqmznrdtbbfia");// 您的邮箱密码qq
//		mailInfo.setFromAddress("15732075781@163.com");
		 mailInfo.setFromAddress("977589558@qq.com");
		 mailInfo.setToAddress("15732075781@163.com");
//		mailInfo.setToAddress("977589558@qq.com");
		mailInfo.setSubject("我爱jpg 你田奇的大项目hwwewe");
		mailInfo.setContent("<span style='color:#e4393c;font-size:25px;'>田奇 我的大项目！！！oo </span>");
//		mailInfo.setFilePath("G:/ads/建表说明.xlsx");
		mailInfo.setImgPath("G:/ads/1.jpg");
		sms.sendFileMail(mailInfo);
	}

}
